﻿/*********************************************************
 * 开发人员：小兵
 * 创建时间：2012-10-18 10:34:44
 * 描述说明：
 * 
 * 更改历史：
 * 
 * *******************************************************/
namespace Mozlite.WebUI.Ribbon
{
    using System;
    using System.Web;
    using System.Data;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using Mozlite.Components;
    using System.Xml;

    /// <summary>
    /// Ribbon按钮项。
    /// </summary>
    public class Item
    {
        /// <summary>
        ///  初始化类<see cref="Item"/>。
        /// </summary>
        public Item() { }

        /// <summary>
        /// 初始化类<see cref="Item"/>。
        /// </summary>
        /// <param name="node">XML节点实例对象。</param>
        /// <param name="parentRole">父角色。</param>
        public Item(XmlNode node, RoleLevel parentRole) {
            RoleLevel = node["role"].GetInnerText().ToEnum<RoleLevel>(parentRole);
            foreach(XmlNode child in node) {
                if(child.NodeType == XmlNodeType.Comment)
                    continue;
                switch(child.Name)
                {
                    case "name":
                        ItemName = child.GetInnerText();
                        IsLocalized = child.GetAttribute("isLocal").ToBoolean(true);
                        break;
                    case "icon":
                        IconUrl = child.GetInnerText();
                        if(IconUrl != null)
                        {
                            if(IconUrl.StartsWith("~/"))
                                IconUrl = Cores.GetUrl(IconUrl);
                            else if(IconUrl.IndexOf('/') == -1)
                                IconUrl = Cores.GetUrl("~/app_utilities/ribbon/images/icons", IconUrl);
                        }
                        break;
                    case "href":
                        Href = child.GetInnerText();
                        if(Href != null)
                        {
                            if(Href.StartsWith("~/"))
                                Href = Cores.GetUrl(Href);
                            else if(!Href.StartsWith("/") && !Href.StartsWith("http://", StringComparison.OrdinalIgnoreCase) && !Href.StartsWith("https://", StringComparison.OrdinalIgnoreCase))
                                Href = Cores.GetBackend(Href);
                        }
                        Target = child.GetAttribute("target");
                        break;
                    case "click":
                        Script = child.GetInnerText();
                        break;
                    case "html":
                        Display = child.GetAttribute("display", "none").ToLower();
                        if(Display != "none")
                            Html = child.InnerXml;
                        break;
                    default:
                        LoadElseChildren(child);
                        break;
                }
            }
        }

        /// <summary>
        /// 读取除了当前节点外的其他节点。
        /// </summary>
        /// <param name="node">节点实例。</param>
        protected virtual void LoadElseChildren(XmlNode node) { }

        /// <summary>
        /// 按钮名称。
        /// </summary>
        public string ItemName { get; set; }
        /// <summary>
        /// 获取或设置是否本地资源化。
        /// </summary>
        /// <remarks>
        /// 如果设置为<c>true</c>，则将通过ItemName调用资源包的数据。
        /// </remarks>
        public bool IsLocalized { get; set; }
        /// <summary>
        /// 图标地址。
        /// </summary>
        public string IconUrl { get; set; }
        /// <summary>
        /// 链接地址。
        /// </summary>
        public string Href { get; set; }
        /// <summary>
        /// 打开类型。
        /// </summary>
        public string Target { get; set; }
        /// <summary>
        /// 点击执行的JavaScript方法。
        /// </summary>
        public string Script { get; set; }
        /// <summary>
        /// 用户组。
        /// </summary>
        public RoleLevel RoleLevel { get; set; }
        /// <summary>
        /// HTML代码。
        /// </summary>
        public string Html { get; set; }
        /// <summary>
        /// HTML代码显示方式。
        /// </summary>
        public string Display { get; set; }
    }
}
